// 《围棋》作者版权所有。版权所有。
// 此源代码的使用受BSD样式
// 许可证的约束，该许可证可以在许可证文件中找到。

package metrics

import (
	_ "runtime" // 依赖于通过linkname函数的运行时
	"unsafe"
)

// 示例捕获单个度量示例。hu cdefg
type Sample struct {
	// 
	// 它必须与所有返回的度量描述之一
	// 中的名称相对应。
	Name string

	// 值是度量样本的值。
	Value Value
}

// 在运行时实现。
func runtime_readMetrics(unsafe.Pointer, int, int)

// Read填充给定度量样本片中的每个值字段。
// 
// 所需的度量值应以适当的名称出现在切片中。
// 鼓励此API的用户在调用
// 效率时重复使用同一个片段，但不要求这样做。
// 
// 注意重复使用有一些警告。值得注意的是，当具有该值的读取未完成时，不应读取或操纵该值；这是一场数据竞赛。
// 此属性包括指针类型的值（例如，Float64Histogram）
// 如果可能，其底层存储将被Read重用。为了在并发设置中安全地使用
// 这些值，必须深度复制所有数据。
// 
// 同时执行多个读取调用是安全的，但它们的参数
// 必须不共享底层内存。当有疑问时，从
// scratch创建一个新的[]样本，它总是安全的，尽管可能效率低下。
// 
// 如果样本值的名称不出现在所有字段中，则将其值填充为
// 表示名称未知。
func Read(m []Sample) {
	runtime_readMetrics(unsafe.Pointer(&m[0]), len(m), cap(m))
}
